$(function () {

    // 切换全选
    $('.allsel').change(function () {

        // 获取当前全选的状态值
        let bool = $(this).prop('checked')

        // 赋值
        $('.sinsel,.allsel').prop('checked', bool)

        //小计
        subPrice(this, num)

        //总计
        allPrice()
    })

    /**
     * 2. 需求: 取消全选 -- 只要有一个商品没有选中,就取消全选
     */
    $('.sinsel').change(function () {

        // 获取总商品的个数
        let allLen = $('.sinsel').length

        // 获取选中商品的个数
        let chLen = $('.sinsel:checked').length

        // 判断
        $('.allsel').prop('checked', chLen === allLen)

        //小计
        subPrice(this, num)

        //总计
        allPrice()
    })

    /**
     * 3. 需求: 商品数量增加
     */
    $('.add').click(function () {
        // 获取当前选中商品的个数
        let num = $(this).siblings('.pronum').val();

        // num自增

        // 赋值
        $(this).siblings('.pronum').val(++num);

        //小计
        subPrice(this, num)

        //总计
        allPrice()
    })

    /**
     * 4. 需求: 商品数量减伤
     */
    $('.reduce').click(function () {
        // 获取当前选中商品的个数
        let num = +$(this).siblings('.pronum').val();

        if (num === 1) {
            return
        }
        // 赋值// num自减
        $(this).siblings('.pronum').val(--num);

        //小计
        subPrice(this, num)

        //总计
        allPrice()
    })

    /**
     * 5. 需求: 输入商品数量
     */
    $('.pronum').keyup(function () {

        // 获取当前选中商品的个数
        let num = $(this).val();

        // 转换为数字
        num = parseInt(num)

        // 判断
        if (isNaN(num)) {
            $(this).val(num = 1)
        } else {
            $(this).val(num)
        }

        //小计
        subPrice(this, num)

        //总计
        allPrice()
    })
    /**
     * 6. 需求: 小计
     */
    function subPrice(obj, sNum) {

        //小计
        let price = $(obj).closest('.shopcar-body').find('.sinprice').text()
        //渲染
        $(obj).closest('.shopcar-body').find('.smallprice').text((sNum * price).toFixed(2))
    }

    /**
     * 7. 需求: 总计 - 计算选中商品的总价和总数量
     */
    function allPrice() {

        //总价
        let totalPrice = 0;

        //选中商品
        $('.sinsel:checked').each(function (index, dom) {

            //选中商品的小计
            let sPrice = +$(dom).closest('.shopcar-body').find('.smallprice').text()

            //累加
            totalPrice += sPrice;
        })

        //得到总价并渲染到页面中
        $('.totalPrice').text(totalPrice);

        //总个数
        let allNum = 0;

        //选中商品
        $('.sinsel:checked').each(function (index, dom) {

            //选中商品的小计
            let nPrice = +$(dom).closest('.shopcar-body').find('.pronum').val()

            //累加
            allNum += nPrice;
        })

        //得到总价并渲染到页面中
        $('.allNum').text(allNum);
    }

})